<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 点击按钮弹出警告：你别点我 -->
    <input type="button" value="点击" onclick="(function(){alert('你别点我')})()">
    
    <script>
        //函数表达式:把函数当作一个值赋给变量。
        //注意：函数表达式必须先声明，在调用。
        let f1 = function fun(){
            console.log('hello f1')
        };
        //函数调用：变量名()调用
        f1();
        let f2 = function fun2(name){
            console.log('hello'+name);
        };
        f2('张三');
        //匿名函数:函数没有名字
        let f3 = function(a,b){
            return a<b?a:b;  //返回最小值
        };
        console.log(f3(12,30));
        //立即执行函数：匿名函数自调用。用()括起来的部分是一个整体。
        (function(a,b){
            console.log(a+b);
        })(9,8);

        let c = function(){
            console.log(1);
        };
        console.log(typeof c);  //函数数据类型：属于object,和数组一样。
        //把函数这个值作为实参传给另一个函数。
        ///回调函数：把函数A当作参数传给函数B,在函数B中调用函数A，此时函数A叫做回调函数。
        let myf1 = function(a){
            a(); //调用myf2();
        };
        let myf2 = function(){
            console.log('myf2');
        };
        myf1(myf2);
        //递归函数：在函数中调用自己。
        //阶乘：10！=10*9*8*7*6...*1  ===>   10*(9!)   ===> 10*9*(8!)
        let  jc = function(n){
            if (n===1){
                return 1;
            }else{
                return n*jc(n-1);
            }
        }
        console.log(jc(10));

    
        


    </script>
</body>
</html>